package com.vtuzx.kingdee.xqc_api.service;

import com.vtuzx.core.bean.dto.VtuzxMap;
import com.vtuzx.kingdee.xqc_core.constant.BillType;
import org.bson.types.ObjectId;

import java.util.List;

/**
 * 库存盘点服务
 */
public interface IXqcInventoryCheckService {

    /**
     * 获取用户盘点作业列表
     *
     * @param _userId 用户ID
     * @param type 获取类型
     * @return 用户盘点作业列表
     */
    VtuzxMap getUserInventoryCheckTaskList(ObjectId _userId, String type);

    /**
     * 获取盘点作业详细列表
     *
     * @param stockNo 仓库编码
     * @param locationNo 仓位编码
     * @param taskId 作业ID
     * @return 盘点作业详细列表
     */
    VtuzxMap getInventoryCheckTaskDetailList(String stockNo, String locationNo, String taskId);

    /**
     * 添加盘点结果
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param locationNo 仓位编码
     * @param taskId 作业ID
     * @param materialNo 物料编码
     * @param boxNo 箱号
     * @param count 数量
     * @return 添加后物料结果
     */
    VtuzxMap addInventoryCheckResult(ObjectId _userId, String stockNo, String locationNo, String taskId, String materialNo, String boxNo, String count);

    /**
     * 更新盘点结果
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param locationNo 仓位编码
     * @param taskId 作业ID
     * @param materialNo 物料编码
     * @param boxNo 箱号
     * @param count 数量
     * @return 更新后物料结果
     */
    VtuzxMap updateInventoryCheckResult(ObjectId _userId, String stockNo, String locationNo, String taskId, String materialNo, String boxNo, String count);

    /**
     * 删除盘点箱号
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param locationNo 仓位编码
     * @param taskId 作业ID
     * @param materialNo 物料编码
     * @param boxNo 箱号
     */
    void deleteInventoryCheckMaterialBox(ObjectId _userId, String stockNo, String locationNo, String taskId, String materialNo, String boxNo);

    /**
     * 删除盘点物料
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param locationNo 仓位编码
     * @param taskId 作业ID
     * @param materialNo 物料编码
     */
    void deleteInventoryCheckMaterial(ObjectId _userId, String stockNo, String locationNo, String taskId, String materialNo);

    /**
     * 保存上传盘点物料
     *
     * @param _userId 用户ID
     * @param stockNo 仓库编码
     * @param locationNo 仓位编码
     * @param taskId 作业ID
     */
    void saveInventoryCheck(ObjectId _userId, String stockNo, String locationNo, String taskId);
}
